package com.jzo2o.orders.manager.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.market.dto.request.CouponUseBackReqDTO;
import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
import com.jzo2o.api.orders.dto.response.OrderResDTO;
import com.jzo2o.api.orders.dto.response.OrderSimpleResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.common.model.msg.TradeStatusMsg;
import com.jzo2o.orders.base.model.domain.Orders;
import com.jzo2o.orders.manager.model.dto.OrderCancelDTO;
import com.jzo2o.orders.manager.model.dto.request.OrderPageQueryReqDTO;
import com.jzo2o.orders.manager.model.dto.request.OrdersPayReqDTO;
import com.jzo2o.orders.manager.model.dto.request.PlaceOrderReqDTO;
import com.jzo2o.orders.manager.model.dto.response.OperationOrdersDetailResDTO;
import com.jzo2o.orders.manager.model.dto.response.OrdersPayResDTO;
import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO;

import java.util.List;

/**
 * <p>
 * 下单服务类
 * </p>
 *
 * @author itcast
 * @since 2023-07-10
 */
public interface IOrdersCreateService extends IService<Orders> {

    /**
     * 订单支付
     * @param
     * @param
     * @return
     */
     PlaceOrderResDTO placeOrder(PlaceOrderReqDTO placeOrderReqDTO);

    void add(Orders orders);
    /**
     * 订单支付
     *
     * @param id              订单id
     * @param ordersPayReqDTO 订单支付请求体
     * @return 订单支付响应体
     */
    OrdersPayResDTO pay(Long id, OrdersPayReqDTO ordersPayReqDTO);

        /**
         * 请求支付服务查询支付结果
         *
         * @param id 订单id
         * @return 订单支付结果
         */
        OrdersPayResDTO getPayResultFromTradServer(Long id);
        /**
         * 支付成功， 更新数据库的订单表及其他信息
         *
         * @param tradeStatusMsg 交易状态消息
         */
        void paySuccess(TradeStatusMsg tradeStatusMsg);
    /**
     * 查询超时订单id列表
     * 自动取消超过15分钟订单，第一种方式：定时器 15分钟取消
     *
     *
     * @param count 数量
     * @return 订单id列表
     */
     List<Orders> queryOverTimePayOrdersListByCount(Integer count);
    /**
     * 订单端获取可用优惠券
     *
     * @param serveId 服务id
     * @param purNum  购买数量
     * @return 可用优惠券列表
     */
    List<AvailableCouponsResDTO> getAvailableCoupons(Long serveId, Integer purNum);

    /**
     * 使用优惠卷下单的方法  核心流程在market工程：计算优惠金额把卷改已经使用，添加已核销表记录
     * 之前写的是无优惠卷下单方法
     * @param orders 订单信息
     * @param couponId 优惠券id
     */
    public void addWithCoupon(Orders orders, Long couponId);
}
